iT邦幫忙

2022 iThome 鐵人賽

DAY 24
1

學會透過網路取得資料,以及對檔案做處理之後,我們的網站服務就不再只是單純地從資料庫內取出資料,而是可以透過各式各樣的管道來獲取資料了。

不過,有各式各樣的管道獲取資料,那麼每個管道的速度就會是一件很重要的事情了。畢竟,如果使用者使用的感受不好,那麼即使我們開了很多的功能,那麼使用者也是不會用的。

今天我們就來提其中一種加速的方式:對資料加上快取!

在 Laravel 內,快取的設置寫在 config/cache.php 內,預設使用 file 的方式進行快取。

在現代,如果環境允許,通常會建議使用 redis 實作快取機制,比較不建議使用較老舊的 memcache 或更適合儲存要長久保留資料的 database

如果要使用 redis 的方式,Laravel Sail 一樣已經安裝好了需要的 driver 和套件,所以我們只需要改 config/cache.php 即可。

存取快取的方式非常簡單,只需要用 Laravel 提供的 Illuminate\Support\Facades\Cache

use Illuminate\Support\Facades\Cache;

$value = Cache::get('key');
$value = Cache::get('key', 'default');

就可以取得快取內容。如果需要的話,也可以設置預設值。

如果想要寫入快取的話:

Cache::put('key', 'value');

接著我們要面對的,就是電腦科學界的知名難題:快取失效的時間設置

There are only two hard things in Computer Science: cache invalidation and naming things. -- Phil Karlton.

利用 PHP 8 可以使用 Named Arguments 的特性,設置失效時間非常直觀:

Cache::put('key', 'value', $seconds = 10);

如果你不喜歡用計算秒數的方式設置時間,也可以傳 DateTime 物件

在 Laravel 內,要做到這件事情非常容易:

Cache::put('key', 'value', now()->addMinutes(10));

如果想要取得資料的同時移除資料,可以使用 pull()

$value = Cache::pull('key');

進行邏輯判斷前,想知道該 key 是否有對應值,可以用 has()

Cache::has('key')

如果你希望移除某個快取,可以用 forget()

Cache::forget('key');

如果你希望移除所有快取,可以用 flush()

Cache::flush();

以上就是 Laravel 對快取的一些基本操作。掌握這些操作方式後,我們就可以將一些存取比較花費時間的資源,比方說遠端主機內的檔案,先儲存在本機比較快能取得的地方。這樣一來,就不用每次使用者想存取這筆資料時,都要實際去取得遠端主機的檔案了。

今天有關快取的部分,我們就介紹到這邊,各位明天見!


上一篇
Day 23:Laravel 存取其他伺服器:Http Client
下一篇
Day 25:快取之外的加速方式:透過 queue 非同步的處理費時任務
系列文
Laravel 9 漫遊,享受魔法般的極速網頁開發體驗30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言